<!DOCTYPE html>
<html>
<head>
	<title></title>
	<link rel="stylesheet" type="text/css" href="../公用CSS文件/all.css" />
	<script type="text/javascript" src="../js/jquery.min.js"></script> 	<script type="text/javascript" src="../js/js.js"></script>
	<meta charset="utf-8">
</head>
<body>
<div class="dt">git概念和配置</div>
<ul>
	<div class="ltable showimg">git概念</div>
	<div class="img">
		<table>
			<tr>
				<td>概念</td><td>git是一个开源的分布式版本控制系统，和其他版本控制系统的不同在于通过快照而非差异来保存版本数据</td>
			</tr>
			<tr>
				<td>来源</td><td>Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件</td>
			</tr>
			<tr>
				<td>特点</td><td>所有操作都可以在本地完成(完全分布)、其数据存储快照而不是差异、使用SHA-1算法生成内容的哈希码=>zlib压缩内容的方式保存数据</td>
			</tr>
		</table>
	</div>

	<div class="ltable showimg">git安装</div>
	<div class="img">
		<li><a href="git/git安装.html" title="https://git-scm.com/book/zh/v2/%E8%B5%B7%E6%AD%A5-%E5%AE%89%E8%A3%85-git">git安装</a></li>
	</div>

	<div class="ltable showimg">git配置</div>
	<div class="img">
		<table>
			<tr>
				<th>操作</th><th>说明</th>
			</tr>
			<tr>
				<td>git config 【--global】 --list</td>
				<td>查看git配置，加入global查看全局，--list可以简写为-l</td>
			</tr>
			<tr>
				<td>git config 【--global】 &lt;key&gt;</td>
				<td>查看指定配置参数</td>
			</tr>
			<tr>
				<td>git config 【--global】 &lt;key&gt; &lt;value&gt;</td>
				<td>设置配置参数</td>
			</tr>
			<tr>
				<td>git config 【--global】 credential.helper store</td>
				<td>配置保存密码认证</td>
			</tr>
			<tr>
				<td>git config 【--system --global】 --unset credential.helper</td>
				<td>取消并删除密码保存，系统级设置有时候需要管理员权限运行</td>
			</tr>
		</table>
		<li>在安装完git之后需要配置用户名user.name和邮箱user.email，因为每一次git提交都会使用这些信息</li>
		<li>git的配置是三层配置，系统级、仓库级和用户级，分别对应配置文件/etc/gitconfig、仓库目录/gitconfig和用户目录/gitconfig，遵守通行的覆盖规则</li>
		<li>--global为查看系统级配置，--local为查看仓库级配置</li>
	</div>
</ul>
<div class="dt">git工作流</div>
<ul>
	<div class="ltable showimg">git工作区域</div>
	<div class="img">
		<table>
			<tr>
				<td>git仓库</td><td>git仓库是用来保存项目的元数据和对象数据库，从其它计算机克隆仓库时，拷贝的就是这里的数据</td>
			</tr>
			<tr>
				<td>工作目录</td><td>对项目的某个版本独立提取出来的内容</td>
			</tr>
			<tr>
				<td>暂存区域</td><td>一个文件，保存下次将提及鸟的文件列表信息，一般在git仓库目录中，有时候也被称为索引</td>
			</tr>
		</table>
	</div>

	<div class="ltable showimg">git三种状态</div>
	<div class="img">
		<table>
			<tr>
				<td>已提交(committed)</td><td>git仓库中已保存</td>
			</tr>
			<tr>
				<td>已修改(modified)</td><td>自上次取出后，做了修改但没有提交到暂存区域</td>
			</tr>
			<tr>
				<td>已暂存(staged)</td><td>已经做了修改并放入暂存区域，但没有提交到git仓库</td>
			</tr>
		</table>
	</div>
</ul>

<div class="dt">git常用命令</div>
<ul>
	<div class="ltable showimg">git基本版本管理命令</div>
	<div class="img">
		<table>
			<tr>
				<th>命令</th><th>作用</th>
			</tr>
			<tr>
				<td>git clone &lt;url&gt; 【仓库名】</td><td>克隆仓库到工作目录，可以自定义仓库名，可以使用http、git、ssh传输协议</td>
			</tr>
			<tr>
				<td>git init</td><td>在当前目录建立仓库并初始化</td>
			</tr>
			<tr>
				<td>git add &lt;file&gt;</td><td>跟踪新文件并将内容放入暂存区域</td>
			</tr>
			<tr>
				<td>git status 【--short】【file】</td><td>查看工作目录或指定文件状态，使用--short或简写-s会整理输出内容，此时以??标记未跟踪文件，M标记已修改文件，A标记暂存文件(有时候也会是绿色的M)</td>
			</tr>
			<tr>
				<td>git diff 【--cached】 【file】</td><td>查看工作目录或指定文件的变化，默认查看工作目录和暂存区域的对比，--cached查看暂存区域之间对比，--staged同义</td>
			</tr>
			<tr>
				<td>git commit 【-m 备注】 【-amend】【-a】 【file】</td><td>提交暂存区域内容到版本库，使用-a直接从工作目录已跟踪文件提交，-amend从暂存区域覆盖提交</td>
			</tr>
			<tr>
				<td>git rm 【-f --cached】 &lt;file&gt;</td><td>同时从暂存区域、跟踪清单和工作目录中移除文件，-f强制跳过安全机制，--cached仅删除跟踪和暂存区域</td>
			</tr>
			<tr>
				<td>git mv &lt;file&gt; &lt;file&gt;</td><td>移动文件，并转移文件跟踪目标到新文件</td>
			</tr>
		</table>
		<li>git clone命令实际上会建立一个.git的子目录，该目录含有仓库必须的所有文件</li>
		<li>如果误操作直接删除了文件而不是git rm，可以在之后直接从工作目录跟踪名单提交到git仓库(这会把删除操作也推送过去)，而git mv不能，因为新命名文件还没有被跟踪</li>
	</div>

</ul>

<div class="dt">git查看提交历史</div>
<ul>
	<div class="ltable showimg">git log指令</div>
	<div class="img">
		<table>
			<tr>
				<th>命名</th><th>说明</th>
			</tr>
			<tr>
				<td>git log 【输出格式option】 【限制参数option】【分支】 【版本】</td><td>查看git提交历史</td>
			</tr>
		</table>
	</div>

	<div class="ltable showimg">输出格式参数</div>
	<div class="img">
		<table>
			<tr>
				<th>参数</th><th>值</th><th>说明</th>
			</tr>
			<tr>
				<td>-p</td><td>无</td><td>按补丁格式显示每个更新之间的差异</td>
			</tr>
			<tr>
				<td>--stat</td><td>无</td><td>显示每次更新的文件修改信息--包含统计和列表</td>
			</tr>
			<tr>
				<td>--shortstat</td><td>无</td><td>显示每次更新的文件修改汇总统计信息</td>
			</tr>
			<tr>
				<td>--name-only</td><td>无</td><td>显示提交信息后已修改的文件清单</td>
			</tr>
			<tr>
				<td>--name-status</td><td>无</td><td>显示提交信息后已修改的文件清单，并标记是修改、添加还是删除</td>
			</tr>
			<tr>
				<td>--relative-data</td><td>无</td><td>使用相对于当前时间的时间显示变更时间</td>
			</tr>
			<tr>
				<td>--pretty</td><td>oneline(单行显示一次提交)、short、full、fuller、format</td><td>--decorate同义，使用其他格式显示历史信息，format为自定义，定义方式参考官方文档</td>
			</tr>
			<tr>
				<td>--graph</td><td>无</td><td>显示ASCII图形表示的分支合并历史</td>
			</tr>
			<tr>
				<td>--all</td><td>无</td><td>显示当前仓库所有分支记录(默认显示当前分支)</td>
			</tr>
		</table>
	</div>

	<div class="ltable showimg">限制输出参数--</div>
	<div class="img">
		<table>
			<tr>
				<th>参数</th><th>说明</th>
			</tr>
			
			<tr>
				<td>-n(数字)</td><td>仅显示最近的n次提交</td>
			</tr>
			<tr>
				<td>-since,-after</td><td>仅显示指定时间之后的提交，支持之间描述类似1 week ago和具体的格式化时间</td>
			</tr>
			<tr>
				<td>-until,-before</td><td>仅显示指定时间之前的提交，支持之间描述类似1 week ago和具体的格式化时间</http://sh.qihoo.com/pc/home?ch=youlike&sign=360_0ed9f8f8td>
			</tr>
			<tr>
				<td>--author</td><td>仅显示指定作者的提交</td>
			</tr>
			<tr>
				<td>-committer</td><td>仅显示指定提交者相关的提交</td>
			</tr>
			<tr>
				<td>--grep</td><td>仅显示含指定关键字的提交</td>
			</tr>
			<tr>
				<td>-S</td><td>仅显示添加或移除了某个关键字的提交</td>
			</tr>
		</table>
	</div>
</ul>

<div class="dt">git版本管理命令</div>
<ul>
	<div class="showimg ltable">git diff对比差异</div>
	<div class="img">
		<table>
			<tr>
				<td>命令</td><td>说明</td>
			</tr>
			<tr>
				<td>git diff 【file】</td><td>对比工作目录和缓存区的文件差异</td>
			</tr>
			<tr>
				<td>git diff --cached【file】</td><td>对比缓存区域之间的文件差异</td>
			</tr>
			<tr>
				<td>git diff 版本 【版本】</td><td>对比两个版本间的差异</td>
			</tr>
		</table>
		<li>git diff对比版本，版本可以由版本哈希码指定，也可以由类似HEAD~1的形式指定</li>
	</div>

	<div class="showimg ltable">git checkout检出</div>
	<div class="img">
		<table>
			<tr>
				<th>命令</th><th>说明</th>
			</tr>
			<tr>
				<td>git checkout 【版本】 【file】</td><td>检出当前分支某个版本，默认检出HEAD指向版本，如果指定文件，则不改变HEAD</td>
			</tr>
			<tr>
				<td>git checkout &lt;branck&gt;</td><td>切换分支(仅仅将HEAD指向某个分支的最后一次提交)</td>
			</tr>
		</table>
	</div>

	<div class="showimg ltable">git reset重置</div>
	<div class="img">
		<table>
			<tr>
				<th>命令</th><th>说明</th>
			</tr>
			<tr>
				<td>git reset 【option】【版本】 【file】</td><td>通过移动HEAD指向、更新索引与HEAD同步、更新工作目录三步来重置版本</td>
			</tr>
		</table>
		<li>git reset有三种重置方式，--soft、--mixed、--hard分别会停留在HEAD、索引和工作目录</li>
		<li>如果为git reset指定文件，仅会将该版本更新到索引区而不改变工作目录和HEAD</li>
	</div>

</ul>

<div class="dt">git分支管理命令</div>
<ul>
	<div class="showimg ltable">分支管理常用命令</div>
	<div class="img">
		<table>
			<tr>
				<th>命令</th><th>说明</th>
			</tr>
			<tr>
				<td>git branch &lt;name&gt;</td><td>创建分支</td>
			</tr>
			<tr>
				<td>git checkout &lt;name&gt;</td><td>切换分支</td>
			</tr>
		</table>
	</div>
	
</ul>

<div class="dt">git通用参数</div>
<ul>
	<table>
		<tr>
			<th>参数</th><th>说明</th><th>命令</th>
		</tr>
		<tr>
			<td>stat</td><td>显示版本间的差异统计信息，既显示每个文件的统计，也显示汇总统计</td><td>git log、git diff等</td>
		</tr>
		<tr>
			<td>shortstat</td><td>显示版本间的汇总统计信息</td><td>同stat</td>
		</tr>
	</table>
	<li>stat显示的统计信息大致为显示每个文件变更了多少行，然后显示多少个文件被更改，新增多少行，删除多少行，其中每一个变更的行都视为删除一行+增加一行</li>
</ul>

</body>
</html>